package com.fyb.basic.juc.completableFuture;

import java.util.concurrent.CompletableFuture;

/**
 * @Author：MR.FANG
 * @name：ThenApply
 * 演示CompletableFuture的thenApplyAsync（） 和 thenCompose
 * 流程： 小王结账 -》 服务员收款 + 服务员开发票 -》小王离开
 * @Date：2025/7/2 下午2:10
 */
public class ThenApply {

    public static void main(String[] args) {
        SmallTool.printTimeAndTread("小王吃好了");
        SmallTool.printTimeAndTread("小王结账要开发票");

        CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
            SmallTool.printTimeAndTread("服务员收款200元");
            SmallTool.sleepMillis(200);
            return "200";
        }).thenApplyAsync(money -> {
            SmallTool.printTimeAndTread(String.format("服务员开发票 票额 %s 元", money));
            SmallTool.sleepMillis(200);
            return String.format("%s 元发票", money);
        });

        SmallTool.printTimeAndTread("小王正在打游戏");
        SmallTool.printTimeAndTread(String.format("%s,小王准备回家", completableFuture.join()));

    }
}
